package com.cwnu.sw.cys.core.user.domain.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Arrays;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * @author jisam
 * @version 1.0
 * @contact "jisamchan@outlook.com"
 * @date 01/04/2025
 * @description 聊天活动枚举类
 * 枚举类，表示聊天活动的状态。
 * 包含在线和离线两种状态，每种状态都有一个对应的状态码和描述。
 * 该类用于在系统中标识用户的聊天活动状态。
 */
@AllArgsConstructor
@Getter
public enum ChatActiveStatusEnum {
    /**
     * 在线状态，状态码为1，表示用户当前在线。
     */
    ONLINE(1, "在线"),

    /**
     * 离线状态，状态码为2，表示用户当前离线。
     */
    OFFLINE(2, "离线"),

    ;

    /**
     * 状态码，用于标识具体的聊天活动状态。
     */
    private final Integer status;

    /**
     * 状态描述，用于描述聊天活动状态的含义。
     */
    private final String desc;

    /**
     * 缓存所有枚举实例的映射，键为状态码，值为对应的枚举实例。
     */
    private static final Map<Integer, ChatActiveStatusEnum> CACHE;

    // 静态初始化块，用于初始化缓存
    static {
        CACHE = Arrays.stream(ChatActiveStatusEnum.values()).collect(Collectors.toMap(ChatActiveStatusEnum::getStatus, Function.identity()));
    }

    /**
     * 根据状态码获取对应的枚举实例。
     *
     * @param type 状态码，不能为null
     * @return 对应的枚举实例，如果状态码不存在则返回null
     */
    public static ChatActiveStatusEnum of(Integer type) {
        return CACHE.get(type);
    }
}
